package com.ld.interceptor;

import com.ld.annotation.LdPermission;
import com.ld.doamin.Employee;
import com.ld.service.ILoginService;
import com.ld.basic.utils.LoginMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Objects;

@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Autowired
    private ILoginService service;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

//        //登录拦截
//        String token = request.getHeader("token");
//        //通过token作为键去查询一下有没有该对象
//        Employee employee = (Employee) LoginMap.map.get(token);
//
//        if (Objects.isNull(employee)){
//            //如果时空的 那么就是没有登录 没有登录就拦截到
//            response.getWriter().println("{\"success\":false,\"message\":\"noLogin\"}");
//            return false;
//        }
//        //权限拦截
//        //先将hander转成HandlerMethod，再获取到当前的方法
//        if (handler instanceof HandlerMethod){
//            HandlerMethod handlerMethod= (HandlerMethod) handler;
//            //通过HandlerMethod拿到当前方法
//            Method method = handlerMethod.getMethod();
//            //看看是否实现了自定义注解
//            LdPermission annotation = method.getAnnotation(LdPermission.class);
//            //如果没有实现这个注解，说明可以直接放行
//            if (Objects.isNull(annotation)){
//                return true;
//            }
//            //如果实现了，那么就拿到sn  要用declaring去获取类
//         String sn=   method.getDeclaringClass().getSimpleName()+":"+method.getName();
//
//            //拿去该角色的所有权限，用sn看看是否在里面，在则放行，不在则拦截
//            //之前查到员工时，就将所有的字段都赋值了，所以可以根据员工的id去查询到角色id 然后再查询该角色中所有的权限唯一标识
//            List<String> sns=service.getPermissionSns(employee);
//
//            //不在则拦截
//            if (!sns.contains(sn)){
//                response.getWriter().println("{\"success\":false,\"message\":\"noPermission\"}");
//                return false;
//            }
//
//        }



        //登录了就放行（放行往后托一点，前面做一个权限拦截）
        return true;


    }
}
